package com.loong.framework.utils;

import jakarta.annotation.Resource;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * @className: RedisUtil
 * @description:
 * @author: sh.Liu
 * @date: 2022-03-09 14:07
 */
@Component
public class RedisUtil {
  @Resource private RedisTemplate<String, String> redisTemplate;

  // 添加有序集合成员
  public void zAdd(String key, double score, String member) {
    redisTemplate.opsForZSet().add(key, member, score);
  }

  // 删除有序集合成员
  public Long zRem(String key, String... members) {
    return redisTemplate.opsForZSet().remove(key, (Object[]) members);
  }

  // 删除有序集合中 score 在指定范围内的成员
  public Long zRemRangeByScore(String key, double min, double max) {
    return redisTemplate.opsForZSet().removeRangeByScore(key, min, max);
  }

  // 获取有序集合的成员数量
  public Long zCard(String key) {
    return redisTemplate.opsForZSet().zCard(key);
  }

  // 设置 key 的过期时间
  public void expire(String key, long timeout, TimeUnit unit) {
    redisTemplate.expire(key, timeout, unit);
  }

  // 获取 key 的过期时间（单位：秒）
  public Long getExpire(String key) {
    return redisTemplate.getExpire(key, TimeUnit.SECONDS);
  }

  // 删除 key
  public Boolean delete(String key) {
    return redisTemplate.delete(key);
  }

  // 获取指定模式的 key 集合
  public Set<String> keys(String pattern) {
    return redisTemplate.keys(pattern);
  }
}
